package com.study.algorithm.binarytree;

/**
 * 543. 二叉树的直径
 */
public class DiameterOfBinaryTree {

    int maxDiameter = 0;


    //深度优先
    public int diameterOfBinaryTree(TreeNode root) {
        getDepth(root);
        return maxDiameter;
    }

    private int getDepth(TreeNode node) {
        if (node == null) {
            return 0;
        }

        // 递归计算左右子树深度
        int leftDepth = getDepth(node.left);
        int rightDepth = getDepth(node.right);

        // 更新最大直径：当前节点作为转折点的路径
        maxDiameter = Math.max(maxDiameter, leftDepth + rightDepth);

        // 返回当前节点的深度
        return Math.max(leftDepth, rightDepth) + 1;
    }
}
